公开了用于将虚拟机从源计算机系统迁移到目标计算机系统的技术。在示范性的实施例中,可以响应于确定客户操作系统试图改变特定的页面而把一组页面映射为可写。在相同的或其它的实施例中,页面可以在发送之前被压缩,以使得通信信道的吞吐量可以被最大化。在相同的或其它的实施例中,存储IO作业可以在源计算机系统上被取消,并且由目标计算机系统重新发布。
1.一种可操作来将源虚拟机从源计算机系统迁移到目标计算机系统的系统,包括:xa0xa0xa0xa0xa0在客户操作系统在源虚拟机中执行的同时,把分配给源虚拟机的客户物理存储器的每个页面映射为只读的装置;xa0xa0xa0xa0xa0在客户操作系统执行的同时,把被映射为只读的每个页面发送到目标计算机系统的装置;xa0xa0xa0xa0xa0响应于检测到所述客户操作系统试图改变特定的页面,取代仅映射该特定的页面,而把一组页面映射为可写的装置,其中所述组包括所述特定的页面;和xa0xa0xa0xa0xa0将被映射为可写的页面重新发送到目标计算机系统的装置。
2.权利要求1的可操作来将源虚拟机从源计算机系统迁移到目标计算机系统的系统,还包括:静态地设置所述组的大小的装置。
3.权利要求1的可操作来将源虚拟机从源计算机系统迁移到目标计算机系统的系统,还包括:基于当前被映射为可写的邻接页面的数量而调节所述组的大小的装置。
4.权利要求1的可操作来将源虚拟机从源计算机系统迁移到目标计算机系统的系统,还包括:基于被映射为可写的页面的数量而调节所述组的大小的装置。
5.权利要求1的可操作来将源虚拟机从源计算机系统迁移到目标计算机系统的系统,其中所述组包括与所述特定页面的客户物理地址相邻的一组客户物理页面。
6.权利要求1的可操作来将源虚拟机从源计算机系统迁移到目标计算机系统的系统,其中所述组包括与所述特定页面的客户虚拟地址相邻的一组客户虚拟页面。
7.权利要求1的可操作来将源虚拟机从源计算机系统迁移到目标计算机系统的系统,还包括:改变识别发布到物理存储设备的客户操作系统存储IO作业的状态信息,以便识别所述客户操作系统存储IO作业还没有被发布到所述物理存储设备的装置;和将识别所述客户操作系统存储IO作业还没有被发布到物理存储设备的状态信息发送到目标计算机系统的装置。
8.权利要求1的可操作来将源虚拟机从源计算机系统迁移到目标计算机系统的系统,还包括:响应于逻辑处理器循环的当前可用性和要发送到目标计算机系统的未压缩页面的可用性而在将页面的至少一部分发送到目标计算机系统之前对它们进行压缩的装置。
9.权利要求1的可操作来将源虚拟机从源计算机系统迁移到目标计算机系统的系统,还包括:响应于确定可用于发送的压缩数据的量少于门限而未压缩地发送所述页面的第一部分的装置。
10.一种用于将在源计算机系统内执行的源虚拟机迁移到目标计算机系统的计算机实施的方法,该方法包括:在客户操作系统在所述源虚拟机中执行的同时,将分配给源虚拟机的页面发送到目标计算机系统;响应于检测到所述客户操作系统试图改变特定的页面,取代仅映射该特定的页面,而将一组页面映射为可写,其中所述组包括所述特定的页面;和将被映射为可写的每个页面重新发送到所述目标计算机系统。
11.权利要求10的计算机实施的方法,还包括:基于被映射为可写的页面的数量,调节所述组的大小。
12.权利要求10的计算机实施的方法,其中所述组包括与所述特定页面的客户虚拟地址相邻的一组客户虚拟页面。
13.权利要求10的计算机实施的方法,还包括:修改针对被发布到物理存储设备的客户操作系统存储IO作业的状态信息,以便反映所述客户操作系统存储IO作业还没有被发布到所述物理存储设备,和将修改后的状态信息发送到所述目标计算机系统。
14.权利要求10的计算机实施的方法,还包括:压缩被分配给所述源虚拟机的页面的第一部分;和将分配给所述源虚拟机的页面的该第一部分和未压缩的第二部分都发送到所述目标计算机系统。
15.权利要求10的计算机实施的方法,还包括:将至少一个对于取消IO作业的请求发送到至少一个物理设备。
背景技术虚拟机迁移是用尽可能少的停机时间将虚拟机从源物理计算机系统移动到目标物理计算机系统的过程。将虚拟机从一个计算机系统移动到另一个的过程对正在运行的客户操作系统的性能确实有影响。例如,当由源虚拟机使用的存储器正被转移到目标计算机系统时,源虚拟机的执行被减慢。这被称为迁移操作的减电(brownout)期。由于需要追踪机制来追踪由正在运行的客户操作系统对虚拟机的存储器作出的所有修改的事实,导致出现性能降级。追踪机制典型地使用通知,所述通知在每次客户操作系统向客户物理页面写入时引发,而这些通知的处理正是减慢了执行的东西。性能影响的另外的来源是由于断电(blackout)期的出现。断电期是其中虚拟机被停止以用于转移的时期。虚拟机被停止以便保证运行时状态保持一致。在这个时期期间中,虚拟机的运行时状态被发送到目标计算机系统,并且虚拟机不能被使用。如果由减电期导致的性能影响被减少并且断电期被缩短,则由虚拟机实现的服务的用户将获益。例如,管理员能够更加容易地平衡在物理计算机上的工作负载,而不用担心断电期和减电期如何影响最终用户。因此,用于减少断电期的性能影响和在减电期内通知的处理的技术是令人期望的。
发明内容在示范性的实施例中,诸多技术可以被使用来减少减电期内的性能降级以及减少断电期的长度。在示范性的实施例中,源计算机系统可以被操作来将虚拟机迁移到目标计算机系统。在这个示范性实施例中,源计算机系统可以包括指令,当其被源计算机系统执行时,使得响应于检测到客户操作系统试图改变特定的页面而把一组页面映射为可写,其中所述组包括该特定的页面。在相同的或另外的示范性实施例中,源计算机系统可以在将某些页面发送到目标计算机系统前压缩它们。在相同的或另外的示范性实施例中,源计算机系统可以取消已发布(issued)的输入/输出(“IO”)作业,并使它们在目标计算机系统上重新发布。本领域的技术人员可以意识到,本公开内容的一个或多个不同的方面可以包括但不限于用于实现这里提及的诸多方面的电路和/或编程;所述电路和/或编程实际上可以是根据系统设计者的设计选择而被配置来实现这里提及的诸多方面的硬件、软件和/或固件的任意组合。前述是概要,因此必然地包含细节的简化、概括以及省略。本领域的技术人员将意识到,本概要仅是说明性的,并且不打算以任意方式进行限制。
附图说明图1描绘了示例性的计算机系统。图2描绘了用于实践这里公开的诸多方面的一种操作环境。图3描绘了用于实践这里公开的诸多方面的一种操作环境。图4描绘了用于实践这里公开的诸多方面的一种操作环境。图5描绘了示范性虚拟化(virtualization)模块如何能够追踪由客户操作系统对存储器做出的改变。图6描绘了示范性虚拟化模块如何能够追踪由客户操作系统对存储器做出的改变。图7描绘了用于实践这里公开的诸多方面的一种操作环境。图8描绘了用于实践这里公开的诸多方面的一种操作环境。图9描绘了一种操作规程。图10描绘了图9的操作规程的替换实施例。图11描绘了一种操作规程。图12描绘了图11的操作规程的替换实施例。图13描绘了图12的操作规程的替换实施例。图14描绘了一种操作规程。图15描绘了图14的操作规程的替换实施例。
具体实施方式本公开的主题可以使用一个或多个计算机系统。图1和下面的讨论打算提供本公开的主题可以在其中被实施的适当计算环境的简要的一般性描述。贯穿全文使用的术语电路可以包括硬件组件,诸如硬件中断控制器、硬驱动器、网络适配器、图形处理器、基于硬件的视频/音频编解码器和被使用来操作这样的硬件的固件。术语电路还可以包括微处理器、专用集成电路和/或一个或多个逻辑处理器,例如,通过固件和/或软件配置的多核通用处理单元的一个或多个核。逻辑处理器可以通过指令——其体现可操作来执行功能的逻辑——进行配置,所述指令可以从例如RAM、ROM、固件和/或大容量存储装置进行加载。在其中电路包括硬件和软件的组合的示例性实施例中,实施者可以编写体现逻辑的源代码,所述源代码随后被编译成可由逻辑处理器执行的机器可读的代码。因为本领域的技术人员可以意识到:技术发展水平已经发展到这样的程度,即在硬件实施的功能或软件实施的功能间具有很小的区别,因此选择硬件抑或软件来实施这里描述的功能仅仅是一种设计选择。换句话说,因为本领域的技术人员可以意识到:软件过程可以被转换为等同的硬件结构,以及硬件结构本身可以被转换为等同的软件过程,因此硬件实施抑或软件实施的选择可以留给实施者处理。现在参照图1,其描绘了示范性的计算系统100。计算机系统100可以包括逻辑处理器102,例如执行核。尽管图示了一个逻辑处理器102,但在其它的实施例中,计算机系统100可以具有多个逻辑处理器,例如,每个处理器基片多个执行核,和/或多个处理器基片,其中每个处理器基片可以具有多个执行核。如图所示,各种计算机可读存储媒体110可以通过一条或多条系统总线互连,所述系统总线将各种系统组件耦合到逻辑处理器102。系统总线可以是若干类型的总线结构中的任何类型,包括存储器总线或存储器控制器、外围总线、以及使用各种各样的总线体系结构中的任一种的本地总线。在示例性的实施例中,计算机可读存储媒体110可以包括例如随机存取存储器(RAM)104、存储设备106(例如,机电硬驱动器、固态硬驱动器等等)、固件108(例如,快闪RAM或ROM)、以及可拆卸存储设备118(诸如像CD-ROM、软盘、DVD、闪存驱动器、外部存储设备等等)。本领域的技术人员应当意识到,可以使用其它类型的计算机可读存储媒体,诸如磁带盒、闪存卡和/或数字视频盘。计算机可读存储媒体110可以提供处理器可执行的指令122、数据结构、程序模块、以及用于计算机100的其它数据(诸如实施在下面的附图中描述的管理器250的可执行指令)的非易失性和易失性存储。基本输入/输出系统(BIOS)120——其包含诸如在启动期间帮助在计算机系统100的单元之间转移信息的基本例行程序——可以被存储在固件108中。大量的程序可以被存储在固件108、存储设备106、RAMxa0104和/或可拆卸存储设备118上,并可以由逻辑处理器102执行,逻辑处理器102包括操作系统和/或应用程序。命令和信息可以通过输入设备116被计算机100所接收,输入设备116可以包括但不限于键盘和指向设备。其它的输入设备可以包括话筒、操纵杆、游戏手柄、扫描仪等等。这些和其它输入设备常常通过被耦合到系统总线的串行端口接口而被连接到逻辑处理器102,但是也可以通过其它的接口连接,诸如并行端口、游戏端口或通用串行总线(USB)。显示器或其它类型的显示设备也可以经由接口连接到系统总线,比如视频适配器,其可以是图形处理单元112的一部分或被连接到图形处理单元112。除了显示器,计算机典型地包括其它的外围输出设备,诸如扬声器和打印机(未示出)。图1的示范性系统还可以包括主机适配器、小型计算机系统接口(SCSI)总线、以及连接到SCSI总线的外部存储设备。计算机系统100可以在使用到一个或多个远程计算机(诸如,某个远程计算机)的逻辑连接的联网环境中操作。远程计算机可以是另外的计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,以及典型地可以包括上面相对于计算机系统100描述的单元中的多个或所有单元。当在LAN或WAN联网环境中使用时,计算机系统100可以通过网络接口卡114被连接到LAN或WAN。NICxa0114(其可以是内部的或外部的)可以被连接到系统总线。在联网环境中,相对于计算机系统100描绘的程序模块或者它们的一些部分可以被存储在远程存储器存储设备中。应意识到,这里描述的网络连接是示范性的,以及可以使用在计算机之间建立通信链路的其它手段。此外,尽管设想本公开内容的多个实施例特别好地适用于计算机化的系统,但是本文档中的任何内容都不打算将本公开内容限制于这样的实施例。转到图2,管理程序微内核202可以被配置来控制和裁决对计算机系统200的硬件的访问。大致地,管理程序微内核202可以生成被称为分区的执行环境,所述分区诸如是子分区1到子分区N(这里N是大于1的整数)。在实施例中,子分区是由管理程序微内核202支持的隔离的基本单元。管理程序微内核202可以将一个分区中的进程与访问另外分区的资源隔离开来,例如,一个分区中的客户操作系统可以被与另外分区的存储器隔离开来,并且因此可能不能检测到在它的分区之外的存储器地址。每个子分区可以被映射到在管理程序微内核202控制之下的一组硬件资源,例如存储器、设备、逻辑处理器循环等等。在实施例中,管理程序微内核202可以是独立的软件产品、操作系统的一部分、被嵌入在母板的固件中、专用集成电路、或它们的组合。管理程序微内核202可以通过限制客户操作系统角度(view)的系统存储器来强制进行分区。客户物理存储器(GPM)是由管理程序微内核202控制的分区角度的存储器。系统物理存储器(SPM)是从管理程序微内核202角度看的存储器。页面是具有开始和结束地址的、存储器的固定长度块。系统物理存储器可以被分配给虚拟机作为客户物理存储器。因此,被分配给虚拟机的存储器的页面将具有客户物理地址(由虚拟机使用的地址)和系统物理地址(页面的实际地址)。术语客户物理存储器是从虚拟机的视角描述存储器页面的简略方式,以及术语系统物理存储器是从物理系统的视角描述存储器的页面的简略方式。客户操作系统可以虚拟化客户物理存储器。虚拟存储器是一种管理技术,其允许操作系统过量调拨(overxa0commit)存储器以及给予应用对邻接的工作存储器的独占性(sole)访问。在虚拟化环境中,客户操作系统可以使用一个或多个页面表来将虚拟地址(被称为虚拟客户地址)翻译成客户物理地址。因此,存储器地址在示范性实施例中可以具有客户虚拟地址、客户物理地址和系统物理地址。在描绘的例子中,图示了父分区组件204,其也可以还被认为是类似于Xen的开放源管理程序的域0。在这个操作环境中的父分区204可以被配置成通过使用虚拟化服务提供器228(VSP)向在子分区1-N中执行的客户操作系统提供资源,虚拟化服务提供器228在开放源社区中典型地被称为后端驱动器。大致地,VSPxa0228可以被使用来通过虚拟化服务客户机(VSC)(在开放源社区中典型地被称为前端驱动器)来对到硬件资源的接口进行复用,并且经由通信协议与虚拟化服务客户机进行通信。如附图所示,虚拟化服务客户机可以在客户操作系统的上下文中执行。这些驱动器不同于客户中的驱动器的其余部分,因为它们可以被提供以管理程序,而不是客户。如图所示,仿真器(emulator)234(例如,虚拟化的IDE设备、虚拟化的视频适配器、虚拟化的NIC等等)可以被配置成在父分区204内运行,以及被附连到可用于客户操作系统220和222的资源。例如,当客户OS触及虚拟设备的寄存器或者被映射到虚拟设备的存储器时,微内核管理程序202可以拦截请求并将客户试图写的值传递到相关联的仿真器。每个子分区可以包括一个或多个虚拟处理器(230和232),客户操作系统(220和222)可以管理和调度线程来在所述虚拟处理器上执行。通常,虚拟处理器是可执行的指令和相关联的状态信息,其提供具有特定体系结构的物理处理器的表示。例如,一个虚拟机可以有具有Intelxa0x86处理器的特性的虚拟处理器,然而,另外的虚拟处理器可能具有PowerPC处理器的特性。在这个例子中,虚拟处理器可以被映射到计算机系统的逻辑处理器,以使得实现虚拟处理器的指令将被逻辑处理器所支持(back)。因此,在包括多个逻辑处理器的实施例中,虚拟处理器可以由逻辑处理器同时执行,与此同时,例如其它逻辑处理器执行管理程序指令。在分区中的存储器和虚拟处理器的组合可以被认为是虚拟机。客户操作系统(220和222)可以是任意的操作系统,诸如像来自xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0
![]()
ntent="drawing" img-format="jpg" inline="no" orientation="portrait" wi="84"/>、
![]()
ntent="drawing" img-format="jpg" inline="no" orientation="portrait" wi="58"/>、开放源社区等等的操作系统。客户操作系统可以包括操作的用户/内核模式,以及可以具有可包括调度器、存储器管理器等等的内核。一般来说,内核模式可以包括逻辑处理器中的执行模式,其准许访问至少享有特权的处理器指令。每个客户操作系统可以具有相关联的文件系统,其可以具有存储在其上的应用(诸如终端服务器、电子商务服务器、电子邮件服务器等等),以及客户操作系统本身。客户操作系统可以调度线程来在虚拟处理器上执行,并且这样的应用的实例可以被实现。现在参照图3,它图示了对于上面在图2中描述的体系结构的替换的体系结构。图3描绘了与图2中的组件类似的组件;然而,在这个示例性的实施例中,管理程序302可以包括微内核组件和与图2的父分区204中的组件(诸如虚拟化服务提供器228和设备驱动器224)类似的组件,而管理操作系统304例如可以包含被使用来配置管理程序302的配置工具。在这个体系结构中,管理程序302可以执行与图2的管理程序微内核202相同或类似的功能;然而,在这个体系结构中,管理程序304可以被配置成向在子分区中执行的客户操作系统提供资源。图3的管理程序302可以是独立的软件产品、操作系统的一部分、被嵌入在母板的固件中,或者管理程序302的一部分可以由专用集成电路来实现。现在转到图4,其图示了用于讨论被使用来将客户操作系统从源物理机迁移到目标物理机的技术的操作环境。图4显示了源计算机系统410和目标计算机系统408,它们由通信信道418互连,所述通信信道诸如像依从互联网协议族(通常称为TCP/IP)的信道。每个计算机系统(源或目标)可以包括与图1的计算机系统100类似的组件,并且可以包括在图2或图3中图示的组件。在示范性实施例中,客户操作系统412(其可以类似于图2或图3的客户OSxa0220或222)可以在源虚拟机406中执行,并且可以被迁移到目标虚拟机404。实时迁移(livexa0migration)是以施加于虚拟机上的最小停机时间将正在执行的虚拟机从一个计算机系统迁移到另一个计算机系统的动作。为了迁移,源虚拟机406的状态,即它的客户物理存储器420的内容、任意虚拟处理器的状态和它的虚拟设备的状态,需要被发送到目标计算机系统408。如上面简要地描述的,客户物理存储器420可以被安排到页面中,例如存储器的在物理存储器寻址和虚拟存储器寻址中都邻接的固定长度的块,其在大小上可以是4千字节(大约2010)。当虚拟化模块402(微内核202、父分区204或管理程序304)发起迁移操作时,虚拟化模块402可以建立追踪表424,例如,其中每个位对应于客户物理存储器420的某个页面的位图。在追踪表424被建立后,源计算机系统410中的每个客户物理页面的内容可以被复制并被发送到目标计算机系统408。例如,虚拟化模块402可以使得源计算机系统410将页面重新映射为只读;复制所述页面;以及开始将它们发送到目标计算机系统408。当客户操作系统412试图向被映射为只读的页面写入时,保护错误将被生成并被发送到虚拟化模块402。作为响应,虚拟化模块402可以将所述页面改变为可写,并将控制返回到客户操作系统412,客户操作系统412现在可以向所述页面写入。另外,虚拟化模块402可以被配置成对追踪表424中与客户操作系统412试图改变的页面相对应的位进行置位。这个概念由图4来图示。例如,客户物理存储器420被示为具有从左到右按从0到7进行编号的8个页面。在这个例子中,客户操作系统412试图向客户物理页面“3”写入,客户物理页面“3”被用“W”进行标记来代表“被写”。(如本领域的技术人员可以意识到的,“页面3”是对于表示页面的开始的客户物理地址的简写,数字3仅仅被使用来清晰地图示概念)。作为响应,虚拟化模块402可以执行并且对追踪表424中与客户物理存储器420的第三页面相对应的位进行置位,以便识别该页面现在是“脏的”,例如从已经被发送到目标计算机系统408的内容发生改变。如本领域的技术人员可以意识到的,当页面正从源虚拟机406被发送到目标虚拟机404时,客户操作系统412可能试图向多个页面写入。由于客户操作系统412试图访问的每个页面导致运行虚拟化模块402指令以将页面从只读改变为可写的事实,这种技术显著降低了虚拟机406的性能。在页面被发送到目标计算机系统408后,虚拟化模块402可以被配置成使得源计算机系统410检查追踪表424并确定是否有任意位被置位。虚拟化模块402可以执行并使得源计算机系统410将用某个位标记的任何页面设置为只读;复制所述页面;重置追踪表424;以及重新发送被复制的页面。在示范性实施例中,虚拟化模块402可以被配置成将一组页面重新映射为可写,而不是仅重新映射客户操作系统试图改变的页面。本技术潜在地使得更多的页面被发送到目标计算机系统408;然而,这里描述的主题的发明人发现:由于一个个地将页面重新映射为可写所导致的性能益处可以比由于将更多的页面发送到目标虚拟机404导致的成本更重要。这个概念由图4图示。响应于确定客户操作系统412试图向第三页面(用W标记的页面)写入,包括页面2和4的一组页面也可被映射为可写(用“MW”标记,以便识别这些页面是响应于客户操作系统试图向不同的页面写入而被映射为可写的)。类似地,在追踪表424中的位可以被置位,其可以使得虚拟化模块402重新发送这些页面到目标计算机系统408。在示范性的实施例中,每次客户操作系统412试图向某个页面写入时,虚拟化模块402可以将一组页面映射为可写。形成所述组的页面可以是客户物理页面或客户虚拟页面。例如,在静态的实施例中,预定数量的邻接页面(诸如像4个或8个页面)可以处在例如以客户操作系统412试图改变的页面为中心的或从该页面开始的组中。在另外的实施例中,组的大小可以基于例如虚拟化模块402已经重新发送页面的迭代(iteration)的数量、或者客户操作系统试图改变的离散页面的数量而被动态地设置。在这些例子中,所述组可以以客户操作系统412试图改变的页面为中心,或者它可以是包括客户操作系统412试图改变的页面的邻接页面的组。在这个实施例中,组的大小可以被动态地减小。在较早的迭代中,可以使用较大的组来借力于客户操作系统412的存储器访问模式中的潜在的局部性(locality)。组大小可以在稍后的迭代中被缩小以便将目标导向正在活动地(actively)被改变的页面组,以及避免不必要地转移存储器。暂时转到图5,其显示了由虚拟化模块402执行的迁移工作循环(migrationxa0pass)的三次迭代。图5显示了客户物理存储器的8个页面。每个页面都具有地址,且为了便于解释,地址是0-7,从左到右读取以及每个页面可以被系统物理存储器的页面所支持。在图示的例子中,虚拟化模块402已经被配置成基于客户物理地址形成页面组。为了便于解释,组的大小已经被设置为对于第二次迭代是4以及对于第三次迭代是2。这图示了其中组的大小被动态设置的实施例。在最初的迭代(迭代1)期间,虚拟化模块402可以将一个或多个页面映射为只读;复制被映射为只读的每个页面;然后开始将所述复制发送到目标计算机系统408。在这个第一次迭代期间的某些时间,客户操作系统412可以改变例如客户物理页面3(用“W”指示)。如上所述,虚拟化模块402可以将追踪表424中与客户物理页面3对应的位以及页面组(xa0即,客户物理页面1、2、4和5)标记为已改变。如图所示,因为虚拟化模块402基于客户物理页面进行分组;对于组中的客户物理页面,可以在追踪表424中对位进行置位。当第一次迭代完成时,虚拟化模块402可以执行并且使得源计算机系统410将追踪表424中被识别的每个页面映射为只读;复制所述页面;重置追踪表424;以及开始将所述页面重新发送到目标计算机系统408。在示范性实施例中,所述页面可仅仅在它们将要被发送到目标计算机系统408前被复制。在这个例子中,复制和重新发送页面的操作可以一次按每个页面或几个页面地发生。继续图5的描述,尽管虚拟化模块402正在将迭代1后被识别的页面发送到目标计算机系统408,客户操作系统412可以再次改变例如客户物理页面3。在这个例子中,虚拟化模块402可以再次将一组页面映射为已改变(在这次迭代中是2个页面而不是4个)。如附图所示,客户物理页面3可以在追踪表424中被标记为已改变。类似地,客户物理页面2和4可以在追踪表424中被标记为已改变。当第二次迭代完成时,虚拟化模块402可以执行并使得源计算机系统410重新发送由追踪表424识别的页面。这个过程可以继续,直到例如迭代的最大次数出现,或者被标记为脏的页面的数量少于预定的值。尽管每次迭代被显示为这样的循环:重新映射为只读;复制脏页面;清除追踪424;和发送页面,但是本公开内容中的任何内容都不把虚拟化模块402限制为以这样的方式操作。相反,该过程被使用于举例说明目的。因此,在示范性的实施例中,虚拟化模块402可以被配置成在成批的页面上或单独的页面上操作。在这个示范性实施例中,虚拟化模块402可以被配置成将一批页面重新映射为只读;复制该批脏页面;清除追踪424;和将该批页面发送到目标计算机系统408。在另一个示范性实施例中,当一组页面从只读被映射为可写时,虚拟化模块402可以被配置成开始将这些页面重新映射为只读并在继续进行到其它页面前复制这些页面。暂时转到图6,它显示了其中虚拟化模块402基于客户虚拟存储器形成页面组的实施例。在图示的例子中,当客户虚拟页面3在迭代1期间被改变时,一组页面可以基于客户虚拟页面3的客户虚拟地址被选择。例如,客户物理页面1附近的一组4个页面可以被标记为已改变。这个例子在计算上是更加困难的,因为需要访问将客户物理页面映射到客户虚拟页面的页面表。转回到图4,在预定次数的迭代或脏页面的数量少于门限时,虚拟化模块402可以停止虚拟机406(即,虚拟处理器被停止并且源虚拟机406进入断电期),以及将在追踪表424中识别的任何剩余的页面连同用于虚拟设备414的状态信息一起发送到目标计算机系统408。用于虚拟设备414的状态信息可以包括例如虚拟机406中的虚拟处理器的状态、虚拟设备的状态,虚拟设备例如是仿真器、VSP、虚拟NIC、虚拟视频适配器、VSC等等。压缩操作可以由压缩模块450执行。压缩是计算上昂贵的操作,因此,在吞吐量为关键的情形中(诸如在迁移操作中),典型地不使用它。然而,在示范性实施例中,当有足够的数据(存储器页面和状态信息)来达到例如针对网络卡的饱和点所设置的比特率目标时,可以执行压缩。例如,在其中逻辑处理器循环可用以及未压缩页面准备好被发送的实例中,可以使用压缩。在这种情形下,网络连接可以因数据而饱和,并且假定网络上有(每秒)相同的数据量,则压缩可以被使用来增加有效的吞吐量。在特定的示范性实施例中,压缩模块450可以被配置成在低优先级线程上运行,并且仅在逻辑处理器另外空闲时运行。在这个例子中,比特率目标可以被设置,以及虚拟化模块402可以被配置成将数据(例如客户物理存储器的页面和/或状态信息)发送到网络适配器以便于达到这个目标。在示范性实施例中,当虚拟化模块402需要更多数据来发送时,其可以被配置成首先检查压缩模块450以便查看压缩数据是否是可得到的。在没有压缩数据可得到的实例中,虚拟化模块402可以选择未压缩数据来发送。在压缩操作期间,数据不可得到来进行发送,因此在过程结束时,仍然在被压缩的最后的页面需要等待压缩被完成(非常短暂的等待),然后被发送。总之,这种压缩技术增加了有效的转移速率。一旦目标虚拟化模块430接收到用于虚拟设备414的状态信息和页面,虚拟化模块430便可以在目标虚拟机404上配置虚拟设备414的状态以便反映接收到的状态信息,并将接收到的页面复制到客户物理存储器422中。在其中页面被重新发送的实例中,虚拟化模块430可以使得在重新发送的页面中的内容被写入该页面中,由此盖写已经存在的内容。当足够的内容被复制到客户物理存储器422中时,目标虚拟机404中的虚拟处理器可以被重新启动,并开始运行客户操作系统412。参照图7,其图示了被使用来举例说明用于获得虚拟存储设备(即,虚拟设备)状态的技术的环境。图7图示了虚拟化存储服务702,其可以是可执行指令的模块,所述模块在例如管理程序304或父分区204内操作。虚拟化存储设备702可以通过经由存储设备驱动器712向诸如存储设备714这样的物理存储设备发出存储请求,来代表虚拟机操控所述请求。简要地,存储设备714可以对于源计算机系统410是本地的;它可以是存储区域网络(“SAN”)目标、联网的文件系统等等。继续图7的描述,IO发布机制704可以被客户操作系统412使用来发布IO作业。在示范性的实施例中,IO发布机制704可以是与上面描述的相类似的虚拟化服务客户机。在这个示范性的实施例中,IO发布机制704可以经由消息传递信道向虚拟化存储服务702发送高级别存储请求。例如,IO发布机制704可以向虚拟化存储服务702发送小型计算机系统接口(“SCSI”)命令。这种技术允许虚拟机比使用仿真时更快速地访问虚拟化存储服务702。在替换的实施例中,IO控制器仿真器可以在例如管理程序304或父分区204中执行。在这个例子中,IO控制器仿真器可以被附连到源虚拟机406的多个寄存器和存储器映射的IO空间,以使得对这些资源的访问被俘获(trap)并被重新定向到IO控制器仿真器。在这个例子中,IO发布机制704可以被认为是支持客户操作系统412试图访问的寄存器和存储器映射的IO空间。例如,经由IO端口访问的寄存器可以被使用来识别IDE仿真器是主IDE通道还是辅助IDE通道,以便屏蔽中断、启动事务处理等等。在这个实施例中,虚拟化模块402可以在这些端口上设置陷阱,并且如果客户操作系统412中的驱动器试图向作用就像硬件端口的东西写入时,虚拟化模块402可以俘获寄存器访问(例如,拦截寄存器访问)、停止运行该驱动器的虚拟处理器、和将写入到寄存器的东西传递到IO控制器仿真器。IO控制器仿真器然后可以被执行并采取行动。例如,IO控制器仿真器可以向虚拟化存储服务702发送IO作业,以便例如读取数据块。如图所示,虚拟化存储服务702可以维持表706、708和710,这些表可以被使用来存储关于它当前正在操控的IO作业的信息。在示范性的实施例中,每个表可以是诸如存储器中的链表这样数据结构,以及关于进入的IO作业的信息可以被存储在其中。排队的IO作业表706可以存储关于它已经从虚拟机406接收、但是还没有被发布到存储设备714的IO作业的信息。例如,当IO作业(比如,对于读取硬驱动器的某个扇区的请求)被接收到时,其可以在排队的IO作业表706中被排队,直到它可以被发布到存储设备714。图7还显示了发布的IO作业表708可以由虚拟化存储服务702维持。这个表可以追踪已经被发布的、但是还没有被物理存储设备714完成的IO作业。当虚拟化存储设备702发布作业时,存储设备驱动器712执行并且使得IO作业被发送到存储设备714。此时,可以具有它自己的内部队列的存储设备714确定如何以最高效的方式完成IO作业。还显示了完成的IO作业表712。该表可以存储关于已经被完成的、但是还没有被报告回源虚拟机406的IO作业的信息。在示范性实施例中,虚拟设备的状态,例如虚拟化存储服务702的状态,需要被迁移到目标计算机系统408,以使得目标虚拟机404可以被正确地实例化。因此,表706到710中的信息需要被复制到目标虚拟机404。在本发明之前,为了保证在运行时状态和虚拟设备(诸如虚拟化存储服务702)的状态之间的一致性,在断电期间所有未决的(即发布的)IO作业需要在所述状态可以从源计算机系统410被转移到目标计算机系统408前结束。这可以在源虚拟机406已经被停止后通过等待所有未决的IO作业的完成来实现。然而,在其中很大量的IO作业是未决的或者存储设备714忙于操控来自多个虚拟机的IO作业的实例中,这种等待显著地增加了断电期的持续时间。转到图8,其图示了一种用于快速地迁移虚拟化存储服务702的状态而不必等待所有未决的IO作业完成的技术。图8显示了在两个时间点上的表706-710,它们包括IO作业1-12。在这个例子中,当前发布到存储设备714但是还没有被完成的IO作业(即,未决的IO作业)可以从发布的IO作业表708被移动到排队的IO作业表706。这个操作的结果是发布的IO作业表708已经被清空,以及虚拟化存储服务702的状态现在可以立即被发送到目标计算机系统408。这通过箭头和虚线来图示,它们指示IO作业5-8已经被向上移回到排队的IO作业表706。这个操作的影响是目标计算机系统408上的虚拟化存储服务将重新发布IO作业5到8;然而,正如这里公开的主题的发明人所识别的,因为读操作和写操作并不被保证以任何特定的次序出现,因此IO作业以何种次序被发送到存储设备或者IO作业被发送多次都是没关系的。例如,当IO作业是写操作时,让存储设备执行同一个IO作业多次是可允许的。对于读操作,因为由存储设备执行读操作的次序并不被保证,因此对在存储单元中存储着什么并不做出假设。因此,如果读IO作业被执行两次,则只有在它实际被完成并且被报告回客户操作系统后,客户才可以将它自己配置成依赖于存储在所述存储单元中的信息。因此,在这个实施例中,可以被目标计算机系统使用的虚拟化存储服务702的状态可以被快速地获得,而不必等待被发布的作业结束。在这个示范性实施例中,虚拟化存储服务702的状态与发送到目标虚拟机404的状态不同;然而,由于存储装置的固有特性,其在功能上是等同的。因为IO作业事实上仍然是未决的;在示范性实施例中,在虚拟化存储服务702的状态被发送到目标计算机系统408后,虚拟化存储服务702可以试图取消未决的IO作业。在这个示范性实施例中,虚拟化存储服务702可以向存储设备发送信号,请求取消IO作业5-8。一些IO作业可以被取消,其它的IO作业可能已经处于正在完成的过程中而不能被取消。在IO作业被取消或完成后,存储设备714的控制可以被转移给目标虚拟机404。xa0在这种配置中,源计算机系统408仅必须等待不能被取消的IO作业,所述IO作业典型地是正在被存储设备714活动地处理的一小组IO作业。而且,因为虚拟化存储服务702的可工作的状态被快速地获得并被发送到目标计算机410,所以目标计算机系统410上的虚拟化存储服务可以在虚拟化存储服务702正在等待不能被取消的IO作业完成时被配置。下面是描绘操作规程的一系列流程图。为了便于理解,流程图被组织成使得初始的流程图经由总体“大图”视角给出实现,而随后的流程图提供进一步的附加部分和/或细节。此外,本领域的技术人员可以意识到,由虚线描绘的操作规程被认为是可选的。现在转到图9,其图示了一种操作规程。操作900开始操作规程,以及操作902图示了当客户操作系统在源虚拟机中执行的同时,使得分配给源虚拟机的客户物理存储器的每个页面被映射为只读。在示范性的实施例中,虚拟化模块402(例如,管理程序302或微内核202)可以在页面被发送到目标计算机系统408前将每个页面标记为只读。如果客户操作系统412试图例如通过向已经被标记为只读的某个页面写入来改变此页面,则页面错误将出现以及虚拟化模块402将被通知。例如,在虚拟化模块402将客户物理存储器420映射为只读后,它可以复制多个页面。在示范性实施例中,虚拟化模块402可以批量地映射客户物理存储器页面,或者虚拟化模块402可以连续地映射页面。在执行迁移操作前,通信信道418(诸如基于TCP/IP的通信信道)可以在源计算机系统410和目标计算机系统408间被建立。诸如所需的虚拟处理器的数量、客户存储器的量和布局、以及源虚拟机406的其它特性这样的配置信息可以被传递到目标计算机系统408。虚拟化模块430然后可以接收指示迁移操作将被执行的信号,并且可以实例化目标虚拟机404,即分配客户物理存储器422、加载虚拟设备414和虚拟处理器等等。在目标虚拟机404被实例化后,客户物理存储器的页面可以被发送到目标虚拟机404。继续图9的描述,操作904显示在客户操作系统执行的同时使得被映射为只读的每个页面被发送到目标计算机系统。例如且转到图4,虚拟化模块402(其可以包括可执行指令)可以被逻辑处理器执行,并且使得被分配给源虚拟机406的客户物理存储器420的页面被发送到目标计算机系统408。当客户物理存储器420的页面被转移到目标计算机系统408时,客户操作系统412可能正在活动地执行。或者换句话说,客户操作系统412中的调度器可能正在活动地调度线程来在源虚拟机406的一个或多个虚拟处理器上运行。因为此,客户操作系统412可以活动地改变客户物理存储器420的内容。在这个例子中,虚拟化模块402可以被配置成连续地复制客户存储器的每个页面,或如上所述的,在成批的页面上操作。图9的操作906显示了使得一组页面响应于检测到客户操作系统试图改变特定的页面而被映射为可写,其中所述组包括该特定的页面。继续前面的例子,在客户操作系统412试图向页面写入的实例中,指示所述页面的地址的通知可以被发送到虚拟化模块402。响应于通知,虚拟化模块402可以在追踪表424中标记与所述页面的地址相对应的位,并将所述页面重新映射为对于虚拟机406是可写的。此时,客户操作系统412可以向所述页面写入。在示范性的实施例中,取代仅映射特定的页面,虚拟化模块402可以将包括该特定页面的一组页面重新映射为可写。虚拟化模块402可以使用任意的技术来选择一组页面。例如,以该特定页面为中心的一组邻接页面可以被选择为所述组的一部分。在另外的实施例中,虚拟化模块402可以形成从该特定页面的地址开始的一组页面。在实施例中,响应于指示特定页面的地址的通知,虚拟化模块402可以执行并从存储器中检索指示有多少附加的页面应当在所述组中的数。在示范性的实施例中,虚拟化模块402可以检索所述值;基于被改变的页面的地址和所述数来确定要映射为可写的一组页面的地址;将该组页面重新映射为可写;以及在追踪表424中对位进行置位,指示该组页面要被认为是脏的。在示范性的实施例中,重新映射的附加页面的数量可以是静态的,或基于当前的条件被动态地计算。转到操作908,其显示了使得被映射为可写的页面被重新发送到目标计算机系统。例如,标记为可写的页面可以经由源计算机系统410的网络适配器被重新发送到目标计算机系统408。例如,虚拟化模块402可以检查追踪表424,以便确定是否有任何页面自它们被复制以来已经被改变。在页面已经被改变的实例中,虚拟化模块402可以将它们重新映射为只读;在追踪表424中重置与所述页面对应的位;复制所述页面;以及将所述页面发送到目标计算机系统408。如上所述,虚拟化模块402可以被配置成在迁移操作期间的任意时间检查追踪表424。例如,虚拟化模块402可以连续地复制和发送页面,然后检查追踪表424(类似于在图5和图6中描述的操作),或者虚拟化模块402可以诸如像响应于保护错误而适时地(opportunistically)检查追踪表424。图10图示了图9的操作规程的替换实施例,包括操作1010-1024。操作1010显示了使得组的大小被静态地设置。例如,在实施例中,被虚拟化模块402使用来设置所述组的大小的数可以被静态地指派。在示范性的实施例中,虚拟化模块402可以在发起迁移操作之前静态地设置所述组的大小。在这个示范性的实施例中,组的大小可以根据分配给源虚拟机的客户物理存储器的量和/或通信信道418的带宽而被设置。继续图10的描述,操作1012显示了使得所述组的大小基于当前被映射为可写的邻接页面的数量而被调节。例如,所述组的大小可以基于与该特定页面邻接的被映射为可写的页面的数量而被动态地设置。在这个示例性实施例中,组的大小可以基于在追踪表424中被映射为可写的邻接页面的数量而增加和减少。例如,虚拟化模块402可以被配置成当追踪表424被访问时基于被标记为可写的邻接页面的数量来适配所述组的大小。在这个示范性实施例中,第一页面可以被客户操作系统412改变,以及第一页面可以被映射为可写。例如,如果客户操作系统412改变邻接页面,则虚拟化模块402可以确定第一页面被映射为可写,并且可以把所述组的大小从1个页面到N个页面(其中N是大于1的整数)地适配。转到操作1014,其显示了使得组的大小基于被映射为可写的页面的数量而被调节。例如,在实施例中,组的大小可以基于被映射为可写的页面的数量而被动态地设置。在实施例中,虚拟化模块402可以确定有多少页面被映射为可写,并可以使用线性或非线性函数来增加或减少页面的数量。例如,组的大小可以被初始地设置为8个页面。因此,虚拟化模块402例如可以被配置成选择包括特定页面的一组8个页面,并降低所述数量以使得例如通过最后的迭代,所述组仅包括该特定页面。虚拟化模块402可以在对页面的随后的工作循环期间调节组的大小,并且例如将组的大小从8降低到5。转到操作1016,其是图9的操作规程的细化,它显示了所述组包括与该特定页面的客户物理地址相邻的一组客户物理页面。例如,并转到图5,在实施例中,虚拟化模块402可以基于客户物理地址将页面分组。因此,在这个示范性的实施例中,当客户物理页面在写操作中被访问时,虚拟化模块402可以将它连同与它相邻的客户物理页面一起重新映射。如由迭代2所示的,当客户物理页面3在写操作中被访问时,虚拟化模块402可以识别与它相邻的客户物理页面(页面1、2、4和5)的地址;且在追踪表424中将它们标记为已改变。继续图10的描述,操作1018(其是图9的操作规程的细化)显示了所述组包括与该特定页面的客户虚拟地址相邻的一组客户虚拟页面。转到图6,在实施例中,虚拟化模块402可以基于客户虚拟地址将页面分组。在这个示范性的实施例中,当客户虚拟页面在写操作中被访问时,虚拟化模块402可以将它连同相邻的客户虚拟页面一起重新映射到支持它的客户物理页面。如由迭代2所示,当客户虚拟页面3在写操作中被访问时,虚拟化模块402可识别支持它的客户物理地址(客户物理页面1)以及与其毗邻的客户物理页面的地址(在本例中是客户物理页面0、5、6和7);将它们映射为可写;以及在追踪表424中将它们标记为已改变。参照图10的操作1020,其显示了使得识别被发布到物理存储设备的客户操作系统存储IO作业的状态信息被改变,以便识别客户操作系统存储IO作业还没有被发布到物理存储设备;以及使得识别客户操作系统存储IO作业还没有被发布到物理存储设备的状态信息被发送到目标计算机系统。例如,并且转到图8,识别IO作业(即,对于读或写物理存储装置的扇区的请求)的信息可以被改变,以便反映发布的IO作业在虚拟化存储服务702中还没有被发送。在这个例子中,IO作业已经被发布到存储设备714;然而,与它们相关联的信息已经被改变,使得虚拟化存储服务702的状态可以被立即迁移到目标计算机系统408。在目标计算机系统408上被实例化的虚拟化存储服务702然后可以重新发布从发布的IO作业表708移动到排队的IO作业表的IO作业。在关于发布的IO作业的信息已经从发布的IO作业表708被移动到排队的作业表706、以及虚拟化存储服务702的状态已经被发送到目标计算机系统408后,虚拟化存储服务702可以试图取消被发布到存储设备714的IO作业。或者换句话说,虚拟化存储服务702可以试图取消被重新列为待决的并被发送到目标计算机系统408的IO作业。在特定的例子中,虚拟化存储服务702可以向存储驱动器712发送信号,指导其取消IO作业。在一些实例中,存储设备712可能能够取消IO作业,即,IO作业被存储在其控制的队列中或可以访问的存储设备714的队列中。在这个实例中,这些IO作业可以被取消。替换地,在所有权从源计算机系统410向目标计算机系统410转移期间,虚拟化模块402可以依赖于存储设备对存储IO作业的自动取消。在这个例子中,一旦虚拟化存储服务702的状态已经被发送到目标计算机系统408,存储设备712的控制就可以被转移。当不再有IO作业被列为已发布的时,或替换地当虚拟化存储服务702的状态已经被发送到目标计算机系统408时,虚拟化存储服务702可以将这个信息报告给虚拟化模块402。在这个例子中,虚拟化模块402可以从物理存储设备714断开,并向目标计算机系统408发送信号。目标计算机系统408上的虚拟化模块430可以接收该信号,并将目标虚拟机404连接到物理存储设备714。当目标虚拟机404正在运行时,目标计算机系统408上的虚拟化存储服务可以向存储设备714发布被列为排队的IO作业。在这个例子中,一些IO作业将被重新发布到存储设备714。转到操作1022,其显示了使得响应于逻辑处理器循环的当前的可用性和要发送到目标计算机系统的未压缩页面的可用性而在将页面的至少一部分发送到目标计算机系统之前对它们进行压缩。例如,源计算机系统410可以被配置来在以下的时刻压缩页面,即:可用于在网络上立即发送的压缩数据的量降低到低于缓冲器门限且逻辑处理器循环可用。在这个例子中,虚拟化模块402可以执行并复制一组页面。在示范性实施例中,压缩模块450可以正在用低线程优先级运行,并可以被配置成等待如下“事件”,即所述“事件”指示压缩数据的输出队列具有少于缓冲器门限的数据。当压缩线程运行时,它可以被调度来在另外的空闲逻辑处理器上运行。转到操作1024,其显示了使得页面的第一部分响应于确定可用于发送的压缩数据的量少于门限(在本描述中称为未压缩门限)而被未压缩地发送。例如,虚拟化模块402可以被配置成在可得到的压缩数据的量少于未压缩门限的实例中发送未压缩数据。在特定的实施例中,未压缩门限值可以是零。因此,在这个实施例中,虚拟化模块402可以被配置成在压缩数据不可得到的实例中发送未压缩数据。在另外的实施例中,未压缩门限可以高于零。例如,未压缩门限可以被设置成4千字节或1兆字节。未压缩门限应当被设置成足以实现经由网络的高效递送的值。在示范性实施例中,源计算机系统410可以被配置成当可用于立即发送到目标计算机系统408的压缩数据的量降低到低于缓冲的压缩数据的缓冲器门限量时压缩页面。响应于所述确定,压缩模块450可以开始压缩未压缩数据,直至达到压缩数据的缓冲器门限量或者不再有未压缩数据可用于压缩。在这个示范性实施例中,缓冲器门限可以被设置成虑及要被缓冲的压缩数据的量的值。例如,缓冲器门限可以被设置成某个值,使得无论压缩模块450或者网络适配器中哪一个较慢,其都可以被允许来连续地处理压缩数据。即,缓冲器门限应当被设置成足够大的值,以使得当压缩模块450比网络适配器慢时,压缩模块450可以连续地压缩数据,而当网络适配器比压缩模块450慢时,网络适配器可以连续地发送压缩数据。在两种情形中,在由压缩模块450或网络适配器中的较快者进行的处理中的典型的短暂临时中断并不导致两者中的较慢者所进行的处理的中断。而且,由于可变的压缩速率以及CPU时间的可用性的可变性,本领域的技术人员将认识到:在总的迁移过程中,哪一个较慢可能会改变。现在转到图11,其图示了用于实践本公开内容的诸多方面的操作规程,包括操作1100、1102、1104和1106。操作1100开始操作规程,以及操作1102显示了当客户操作系统在源虚拟机内执行的同时,将分配给源虚拟机的页面发送到目标计算机系统。例如,并且转到图4,源计算机系统410的网络适配器可以被配置成传送信息的一个或多个分组,所述信息指示在分配给源虚拟机406的存储器的页面中的内容。例如,虚拟化模块402可以接收针对迁移源虚拟机406的请求,并且作为响应,虚拟化模块402可以将客户物理存储器420的每个页面重新映射为只读;以及复制客户物理存储器420的每个页面。虚拟化模块402然后可以开始将每个复制的页面发送到目标计算机系统408。如上所述,客户操作系统412可以在这个时段期间继续运行,并且可以试图向客户物理存储器420的一个或多个页面写入。继续图11的描述,操作1104显示了响应于检测到客户操作系统试图改变特定的页面而将一组页面映射为可写,其中所述组包括该特定的页面。转到图4,虚拟化模块402(例如,管理程序微内核202)可以执行并使得一组页面被映射为可写。例如,客户操作系统412可以尝试向特定的页面写入(其在此前已经被标记为只读),且保护错误将出现。虚拟化模块402将运行并通过识别与所述错误相关联的页面的地址而操控所述错误;以及将一组页面重新映射为可写。例如,图4显示了客户操作系统试图向页面3写入,即存储器的具有开始的客户物理地址和结束的客户物理地址的固定长度的块。作为响应,虚拟化模块402可以将一组页面(即,页面2、3和4)重新映射为可写。如图所示,虚拟化模块424还可以在追踪表424中标记与页面2、3和4相对应的位以便识别这些页面。如本领域的技术人员可以意识到的,所述组中的页面的数量可以被调节并且可以是有1个页面的组,即组中只具有该特定页面,或者它可以是非常大的数量。转到操作1106,其显示了将映射为可写的每个页面重新发送到目标计算机系统。例如,且转回到图4,虚拟化模块402可以被配置成将已经被映射为可写的每个页面重新发送到目标计算机系统408。例如,在虚拟化模块402发送系统物理存储器的每个页面后,虚拟化模块402可以检查追踪表424以便确定是否有任意位已经被置位。继续上面的例子,虚拟化模块402可以将客户物理存储器中的每个页面重新映射为与追踪表424相对应的只读;清除追踪表424;复制所识别的页面;以及开始向目标计算机系统408发送所述页面。现在转到图12,其图示了图11的操作规程的替换实施例,包括操作1208、1210、1212、1214和1216。转到操作1208,其显示了基于被映射为可写的页面的数量调节组的大小。例如,在实施例中,组的大小可以基于被映射为可写的页面的数量而被动态地设置。在实施例中,虚拟化模块402可以确定有多少页面已经被映射为可写,并且使用线性或非线性函数来增加或降低页面的数量。例如,组的大小可以被初始地设置为8个页面。因此,虚拟化模块402例如可以被配置成选择包括该特定页面的一组8个页面,以及降低所述数量以使得例如通过最后的迭代,所述组仅包括该特定页面。虚拟化模块402可以在对页面的随后的工作循环期间调节组的大小,并且例如将所述组的大小从8降低到5。继续图12的描述,操作1210(其是操作1104的细化)显示了所述组包括与该特定页面的客户虚拟地址相邻的一组客户虚拟页面。转到图6,在实施例中,虚拟化模块402可以基于客户虚拟地址将页面分组。在这个示范性的实施例中,当客户虚拟页面在写操作中被访问时,虚拟化模块402可以将它连同相邻的客户虚拟页面一起重新映射到支持它的客户物理页面。如由迭代2所示的,当客户虚拟页面3在写操作中被访问时,虚拟化模块402可以识别支持它的客户物理地址(客户物理页面1)以及与其毗邻的客户物理页面的地址(在本例中是客户物理页面0、5、6和7);将它们映射为可写;以及在追踪表424中将它们标记为已改变。继续图12的描述,操作1212显示了修改针对发布到物理存储设备的客户操作系统存储IO作业的状态信息以便反映所述客户操作系统存储IO作业还没有被发布到物理存储设备;以及将修改后的状态信息发送到目标计算机系统。例如,且转到图7和8,识别IO作业(即对于读或者写物理存储装置的扇区的请求)的信息可以被改变以便反映发布的IO作业在虚拟化存储服务702中被排队。在这个例子中,IO作业已被发布到存储设备714;然而,与它们相关联的信息已经被改变,以使得虚拟化存储服务702的状态可以被快速地查明,而不必等待直至所有的IO作业完成。在目标计算机系统上实例化的虚拟化存储服务702然后可以重新发布从发布的IO作业表708被移动到排队的IO作业表706的IO作业。继续图12的描述,操作1214显示了压缩被分配给源虚拟机的页面的第一部分;和将分配给源虚拟机的页面的该第一部分和未压缩的第二部分都发送到目标计算机系统。在示范性实施例中,源计算机系统410可以被配置成当可用于立即发送到目标计算机系统408的压缩数据的量降低到低于缓冲的压缩数据的缓冲器门限量时压缩页面。响应于所述确定,压缩模块450可以开始压缩未压缩数据,直至达到压缩数据的缓冲器门限量或者不再有未压缩数据可用来压缩。在这个示范性的实施例中,缓冲器门限可以被设置成虑及要被缓冲的压缩数据的量的值。例如,缓冲器门限可以被设置成某个值,使得无论压缩模块450或者网络适配器的哪一个较慢,其都可以被允许来连续地处理压缩数据。即,当压缩模块450比网络适配器慢时,压缩模块450可以连续地压缩数据,而当网络适配器比压缩模块450慢时,网络适配器可以连续地发送压缩数据。虚拟化模块402可以被配置成在可得到的压缩数据的量少于未压缩门限的实例中发送未压缩数据。在特定的实施例中,未压缩门限值可以是零。因此,在这个实施例中,虚拟化模块402可以被配置成在压缩数据不可得的实例中发送未压缩数据,否则它可以发送压缩数据。继续图12的描述,操作1216显示向至少一个物理设备发送至少一个请求以取消IO作业。例如在实施例中,虚拟化模块402可以将一个或多个请求发送到物理设备(例如,网卡、图形卡、存储设备)来取消已经针对源虚拟机406发布的IO作业。在这个示例性实施例中,针对源虚拟机406被虚拟化的每个物理设备可以具有相关联的虚拟化服务提供器,其具有与图8中所描述的那些类似的表。在特定的例子中,并且转回图8,在关于发布的IO作业的信息已经从发布的IO作业表708被移动到排队的作业表706、以及虚拟化存储服务702的状态已经被发送到目标计算机系统后,虚拟化存储服务702可以试图取消被发布到存储设备714的IO作业。或者换句话说,虚拟化存储服务702可以试图取消刚被重新列为待决的IO作业。现在转到图13,它图示了由图12图示的操作规程的替换实施例,包括操作1318,其显示了当发送到物理存储设备的所有IO写作业被取消或被完成时释放对物理存储设备的控制。例如,在实施例中,虚拟化存储服务702可以报告:对于虚拟化模块402来说没有IO作业是未决的。在这个例子中,虚拟化模块402可以从物理存储设备714断开,并且向目标计算机系统408发送信号。在目标计算机系统408上的虚拟化模块430可以接收所述信号,并且将目标虚拟机404连接到物理存储设备714。当目标虚拟机404运行时,目标计算机系统408上的虚拟化存储服务可以重新发布在排队的IO作业表706中的IO作业。现在转到图14,它图示了包括操作1400、1402、1404和1406的操作规程。操作1402显示了使得被分配给源虚拟机的页面被发送到目标计算机系统。例如,并且转到图4,源计算机系统410的网络适配器可以被配置成发送信息的一个或多个分组,所述信息指示在分配给源虚拟机406的存储器的页面中的内容。例如,虚拟化模块402可以接收针对迁移虚拟机406的请求。作为响应,虚拟化模块402可以使得客户物理存储器420的每个页面被映射为只读;被复制;以及被发送到目标计算机系统408。操作1404显示了使得一组页面响应于检测到客户操作系统试图改变特定的页面而被映射为可写,其中所述组包括与该特定页面的客户虚拟地址相邻的客户虚拟页面。转到图4和图5,虚拟化模块402(例如,管理程序302)可以执行并且使得一组页面被映射为可写。例如,客户操作系统412可以尝试向该特定的页面写入(其此前已经被标记为只读),且保护错误将出现。虚拟化模块402可以运行并且通过识别该特定页面的地址来操控所述错误;以及将一组页面重新映射为可写。在这个例子中,所述组可以被形成为包括与客户操作系统412试图改变的客户虚拟地址相邻的客户虚拟页面。如图6所示,客户操作系统412可以试图改变页面3,且页面错误可以被生成。虚拟化模块402可以接收所述错误,以及确定客户物理页面1支持客户虚拟页面3。虚拟化模块402然后可以巡视(walk)将客户物理页面映射到客户虚拟页面的页面表,以及确定与客户虚拟页面3相邻的页面是客户虚拟页面1、2、4和5。虚拟化模块402然后可以确定支持这些页面的客户物理页面是客户物理页面0、5、6和7。虚拟化模块402然后可以将包括客户物理页面0、1、5、6和7的一组页面重新映射为可写。如本领域的技术人员可以意识到的,所述组中的页面的数量可以被调节,并且这个例子仅仅是用于举例说明目的。操作1406显示了使得被映射为可写的每个页面被重新发送到目标计算机系统。例如,且转回到图4,虚拟化模块402可以被配置成将已经被映射为可写的每个页面重新发送到目标计算机系统408。例如,在虚拟化模块402发送客户物理存储器中的包含客户操作系统数据的每个页面后,虚拟化模块402可以检查追踪表424来确定是否有任意位已经被置位。继续上面的例子,虚拟化模块402可以将客户物理存储器的每个页面重新映射为只读;复制与所述位相关联的页面(系统物理页面,在本例中是系统物理页面0、1、5、6和7);清除追踪表424;以及开始发送所述页面。现在转到图15,其显示了图14的操作规程的替换实施例。图15包括附加的操作1508、1510和1512。操作1508显示了使得组的大小基于与特定页面邻接的被映射为可写的页面的数量而被调节。例如,所述组的大小可以基于与该特定页面邻接的被映射为可写的页面的数量而被动态地设置。在这个示例性实施例中,组的大小可以基于在追踪表424中被映射为可写的邻接页面的数量而增大和减小。例如,虚拟化模块402可以被配置成当追踪表424被访问时,基于被标记为可写的邻接页面的数量来适配所述组的大小。在这个示范性实施例中,第一页面可以被客户操作系统412改变,并且第一页面可以被映射为可写。例如,如果客户操作系统412改变邻接页面,则虚拟化模块402可以确定第一页面被映射为可写,并且可以将所述组的大小从1个页面到N个页面(其中N是大于1的整数)地适配。操作1510显示了使得响应于确定可用于发送的压缩数据的量少于门限(在本描述中被称为未压缩门限)而把页面未压缩地发送到目标计算机系统。例如,虚拟化模块402可以被配置成在可得到的压缩数据的量少于未压缩门限的实例中发送未压缩数据。在特定的实施例中,未压缩门限值可以是零。因此,在这个实施例中,虚拟化模块402可以被配置成在压缩数据不可得到的实例中发送未压缩数据,否则它可以发送压缩数据。在示范性实施例中,源计算机系统410可以被配置成在可用于立即发送到目标计算机系统408的压缩数据的量降低到低于缓冲的压缩数据的缓冲器门限量时压缩页面。响应于所述确定,压缩模块450可以开始压缩未压缩数据,直至达到压缩数据的缓冲器门限量或不再有未压缩数据可用于压缩时。在这个示范性实施例中,缓冲器门限可以被设置成虑及要被缓冲的压缩数据的量的值。例如,缓冲器门限可以被设置成某个值,使得无论压缩模块450或者网络适配器中的哪一个较慢,其都可以被允许来连续地处理压缩数据。即,当压缩模块450比网络适配器慢时,压缩模块450可以连续地压缩数据,而当网络适配器比压缩模块450慢时,网络适配器可以连续地发送压缩数据。操作1512显示了使得状态信息被发送到目标计算机系统,所述状态信息指示:发布的IO作业还没有被发布。例如,且转到图8,识别IO作业(即,对于读或者写物理存储装置的扇区的请求)的信息可以被改变,以便反映发布的IO作业在虚拟化存储服务702中还没有被发送。在这个例子中,IO作业已经被发布到存储设备714;然而,与它们相关联的信息已经被改变,使得虚拟化存储服务702的状态可以被立即迁移到目标计算机系统408。在目标计算机系统408上实例化的虚拟化存储服务702然后可以重新发布从发布的IO作业表708移动到排队的IO作业表的IO作业。以上的详细描述经由例子和/或操作图阐述了系统和/或过程的各种实施例。就这样的框图和/或例子包含一个或多个功能和/或操作而言,本领域的技术人员将明白,这样的框图或例子中的每个功能和/或操作可以由各式各样的硬件、软件、固件、或它们的事实上的任意组合来单独地或共同地实施。尽管这里描述的本主题的特定方面已经被显示和描述,但是对于本领域的技术人员明显的是,基于这里的教导,可以在不背离这里描述的主题以及其更广泛的方面的情况下作出改变和修改,以及因此所附权利要求将在它们的范围内包括所有这样的改变和修改,因为它们是在这里描述的主题的真实精神和范围内。